package edg.db;

public class SimulationRunResults {
	
	// Each array has 6 elements, each corresponding to a percentile:
	// .00, .25, .50, .75, .95, 1.00
	private double[] overall;
	
	private double[] triage;
	private double[] treatment;
	
	private double[] acuity1;
	private double[] acuity2;
	private double[] acuity3;
	private double[] acuity4;
	private double[] acuity5;
	private double[] acuity6;
	
	private double[] doctorsUtil;
	private double[] nursesUtil;
	private double[] triageNursesUtil;
	private double[] clerksUtil;
	private double[] bedsUtil;
	
	private int doctors;
	private int nurses;
	private int beds;
	
	private int rate;
	
	/**
	 * Should not be called by other modules.  Used by team 3 to populate data
	 * into an object.
	 * @param triage Spread of wait time in triage.
	 * @param treatment Spread of wait time in treatment.
	 * @param acuity1 Spread of wait time for acuity level 1 patients.
	 * @param acuity2 Spread of wait time for acuity level 2 patients.
	 * @param acuity3 Spread of wait time for acuity level 3 patients.
	 * @param acuity4 Spread of wait time for acuity level 4 patients.
	 * @param acuity5 Spread of wait time for acuity level 5 patients.
	 * @param acuity6 Spread of wait time for acuity level 6 patients.
	 * @param doctorsUtil Spread of doctor utilization.
	 * @param nursesUtil Spread of nurse utilization.
	 * @param triageNursesUtil Spread of triage nurse utilization.
	 * @param clerksUtil Spread of clerk utilization.
	 * @param bedsUtil Spread of bed utilization.
	 * @param doctors Number of doctors used in simulation.
	 * @param nurses Number of nurses used in simulation.
	 * @param beds Number of beds used in simulation.
	 * @param rate Patient arrival rate used in simulation.
	 */
	public SimulationRunResults(
			double[] triage,
			double[] treatment,
			double[] acuity1,
			double[] acuity2,
			double[] acuity3,
			double[] acuity4,
			double[] acuity5,
			double[] acuity6,
			double[] doctorsUtil,
			double[] nursesUtil,
			double[] triageNursesUtil,
			double[] clerksUtil,
			double[] bedsUtil,
			int doctors,
			int nurses,
			int beds,
			int rate) {
		overall = new double[6];
		for(int i=0; i<6; i++) {
			overall[i] = triage[i] + treatment[i];
		}
		
		this.triage = triage;
		this.treatment = treatment;
		
		this.acuity1 = acuity1;
		this.acuity2 = acuity2;
		this.acuity3 = acuity3;
		this.acuity4 = acuity4;
		this.acuity5 = acuity5;
		this.acuity6 = acuity6;
		
		this.doctorsUtil = doctorsUtil;
		this.nursesUtil = nursesUtil;
		this.triageNursesUtil = triageNursesUtil;
		this.clerksUtil = clerksUtil;
		this.bedsUtil = bedsUtil;
		
		this.doctors = doctors;
		this.nurses = nurses;
		this.beds = beds;
		
		this.rate = rate;
	}
	
	/**
	 * Get spread of overall length of stay.
	 * @return Spread of overall length of stay.
	 */
	public double[] getOverallLOS() {
		return overall;
	}
	
	/**
	 * Get spread of wait time in triage.
	 * @return Spread of wait time in triage.
	 */
	public double[] getTriageLOS() {
		return triage;
	}
	
	/**
	 * Get spread of wait time in treatment.
	 * @return Spread of wait time in treatment.
	 */
	public double[] getTreatmentLOS() {
		return treatment;
	}
	
	/**
	 * Get spread of wait time for acuity level 1 patients.
	 * @return Spread of wait time for acuity level 1 patients.
	 */
	public double[] getAcuity1LOS() {
		return acuity1;
	}
	
	/**
	 * Get spread of wait time for acuity level 2 patients.
	 * @return Spread of wait time for acuity level 2 patients.
	 */
	public double[] getAcuity2LOS() {
		return acuity2;
	}
	
	/**
	 * Get spread of wait time for acuity level 3 patients.
	 * @return Spread of wait time for acuity level 3 patients.
	 */
	public double[] getAcuity3LOS() {
		return acuity3;
	}
	
	/**
	 * Get spread of wait time for acuity level 4 patients.
	 * @return Spread of wait time for acuity level 4 patients.
	 */
	public double[] getAcuity4LOS() {
		return acuity4;
	}
	
	/**
	 * Get spread of wait time for acuity level 5 patients.
	 * @return Spread of wait time for acuity level 5 patients.
	 */
	public double[] getAcuity5LOS() {
		return acuity5;
	}
	
	/**
	 * Get spread of wait time for acuity level 6 patients.
	 * @return Spread of wait time for acuity level 6 patients.
	 */
	public double[] getAcuity6LOS() {
		return acuity6;
	}
	
	/**
	 * Get spread of doctor utilization.
	 * @return Spread of doctor utilization.
	 */
	public double[] getDoctorsUtil() {
		return doctorsUtil;
	}
	
	/**
	 * Get spread of nurse utilization.
	 * @return Spread of nurse utilization.
	 */
	public double[] getNursesUtil() {
		return nursesUtil;
	}
	
	/**
	 * Get spread of triage nurse utilization.
	 * @return Spread of triage nurse utilization.
	 */
	public double[] getTriageNursesUtil() {
		return triageNursesUtil;
	}
	
	/**
	 * Get spread of clerk utilization.
	 * @return Spread of clerk utilization.
	 */
	public double[] getClerksUtil() {
		return clerksUtil;
	}
	
	/**
	 * Get spread of bed utilization.
	 * @return Spread of bed utilization.
	 */
	public double[] getBedsUtil() {
		return bedsUtil;
	}
	
	/**
	 * Get number of doctors used in simulation.
	 * @return Number of doctors used in simulation.
	 */
	public int getDoctorsCount() {
		return doctors;
	}
	
	/**
	 * Get number of nurses used in simulation.
	 * @return Number of nurses used in simulation.
	 */
	public int getNursesCount() {
		return nurses;
	}
	
	/**
	 * Get number of beds used in simulation.
	 * @return Number of beds used simulation.
	 */
	public int getBedsCount() {
		return beds;
	}
	
	/**
	 * Get patient arrival rate used in simulation.
	 * @return Patient arrival rate used in simulation.
	 */
	public int getRate() {
		return rate;
	}
	
}